package com.example.backend.dto;

import com.example.backend.domain.enums.TicketPriority;
import com.example.backend.domain.enums.TicketStatus;
import com.example.backend.domain.enums.TicketSource;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.Instant;

/**
 * 工单详情DTO - 用于详情页面显示
 * 包含完整的工单信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TicketDetailDTO {
    
    /**
     * 工单ID
     */
    private Long id;
    
    /**
     * 工单编号
     */
    private String ticketNumber;
    
    /**
     * 工单标题
     */
    private String title;
    
    /**
     * 工单描述
     */
    private String description;
    
    /**
     * 详细描述
     */
    private String descriptionDetail;
    
    /**
     * 工单状态
     */
    private TicketStatus status;
    
    /**
     * 优先级
     */
    private TicketPriority priority;
    
    /**
     * 来源
     */
    private TicketSource source;
    
    /**
     * 客户信息
     */
    private UserSimpleDTO customer;
    
    /**
     * 分配人信息
     */
    private UserSimpleDTO assignedTo;
    
    /**
     * 创建人信息
     */
    private UserSimpleDTO createdBy;
    
    /**
     * 解决人信息
     */
    private UserSimpleDTO resolvedBy;
    
    /**
     * 关闭人信息
     */
    private UserSimpleDTO closedBy;
    
    /**
     * 分类信息
     */
    private CategorySimpleDTO category;
    
    /**
     * 到期时间
     */
    private Instant dueDate;
    
    /**
     * 解决时间
     */
    private Instant resolvedAt;
    
    /**
     * 关闭时间
     */
    private Instant closedAt;
    
    /**
     * 预估工时
     */
    private BigDecimal estimatedHours;
    
    /**
     * 实际工时
     */
    private BigDecimal actualHours;
    
    /**
     * 满意度评分
     */
    private Integer satisfactionScore;
    
    /**
     * 满意度评价
     */
    private String satisfactionComment;
    
    /**
     * 内部备注
     */
    private String internalNotes;
    
    /**
     * 是否公开
     */
    private Boolean isPublic;
    
    /**
     * 是否已升级
     */
    private Boolean isEscalated;
    
    /**
     * 升级原因
     */
    private String escalationReason;
    
    /**
     * 创建时间
     */
    private Instant createdAt;
    
    /**
     * 更新时间
     */
    private Instant updatedAt;
    
    /**
     * 用户简化信息DTO
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class UserSimpleDTO {
        private Long id;
        private String username;
        private String fullName;
        private String email;
        private String role;
    }
    
    /**
     * 分类简化信息DTO
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class CategorySimpleDTO {
        private Long id;
        private String categoryName;
        private String categoryCode;
    }
}

